package com.acol.util;

import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;

public class PaginadorUnico implements Serializable {
	private List registros;
	private String pagina = "1";
	private int qtdRegistrosPorPagina = 25;
	
	private String paginaLabel = "{0}/{1}";
	
	public void ajustaPagina()
	{
		int qtdPaginas = (int)Math.ceil( ((double)registros.size()) / qtdRegistrosPorPagina );
		int paginaAtual = Integer.parseInt(getPagina());
		if(paginaAtual == 0)
			setPagina("1");
		else if (paginaAtual > qtdPaginas)
			setPagina(String.valueOf(qtdPaginas));
	}
	
	public void ajustaPaginaPorPosicaoElementoLista(int posicao)
	{
		int paginaAtual = (posicao/getQtdRegistrosPorPagina())+1;
		setPagina(String.valueOf(paginaAtual));
	}
	
	public List getPaginas(){
		List paginas = new ArrayList();
		
		int qtdPaginas = (int)Math.ceil( ((double)registros.size()) / qtdRegistrosPorPagina );
		for(int i = 1; i <= qtdPaginas; i++){
			paginas.add(new Pagina(new Integer(i), MessageFormat.format(paginaLabel, new Object[]{ new Integer(i), new Integer(qtdPaginas)})));
		}
		return paginas;
	}
	
	private List getRegistrosParaPagina(int pagina)
	{
		if(registros != null && !registros.isEmpty())
		{
			int inicio = (pagina - 1) * qtdRegistrosPorPagina;
			
			if(inicio + qtdRegistrosPorPagina > registros.size()){
				return registros.subList(inicio, registros.size());
			} else {
				return registros.subList(inicio, inicio + qtdRegistrosPorPagina);
			}
		}
		else
			return registros;
	}
	
	public List getRegistrosParaExibicao() {
		int p = 1;
		
		if(pagina != null && !"".equals(pagina)) {
			p = Integer.parseInt(pagina);
		}
		return getRegistrosParaPagina(p);
	}
	
	public class Pagina {
		private Integer pagina;
		private String descricao;
		
		public Pagina(Integer pagina, String descricao){
			this.pagina = pagina;
			this.descricao = descricao;
		}

		public String getDescricao() {
			return descricao;
		}
		public void setDescricao(String descricao) {
			this.descricao = descricao;
		}
		public Integer getPagina() {
			return pagina;
		}
		public void setPagina(Integer pagina) {
			this.pagina = pagina;
		}
	}

	public List getRegistros() {
		return registros;
	}

	public void setRegistros(List registros) {
		this.registros = registros;
	}

	public int getQtdRegistrosPorPagina() {
		return qtdRegistrosPorPagina;
	}

	public void setQtdRegistrosPorPagina(int qtdRegistrosPorPagina) {
		this.qtdRegistrosPorPagina = qtdRegistrosPorPagina;
	}
	
	public void setPaginaLabel(String paginaLabel){
		this.paginaLabel = paginaLabel;
	}

	public String getPagina() {
		return pagina;
	}

	public void setPagina(String pagina) {
		this.pagina = pagina;
	}
	
}
